package br.uvv.Model;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import br.uvv.Enums.SituUsuario;

@Entity
@Table(name="ti_usuario")
public class Usuario extends EntidadeGenerica {

	private static final long serialVersionUID = -1199791616139663220L;

	@Column(name="nome_completo", length=255, nullable=false)
	private String nomeCompleto;
	
	@Column(name="nome_curto", length=128, nullable=true)
	private String nomeCurto;
	
	@Column(length=128, nullable=false)
	private String email;
	
	@Column(length=128)
	private String senha;
	
	@Column(length=128)
	private String token;
	
	@Column(name="email_enviado")
	private Boolean emailEnviado;
	
	@Enumerated
	@Column(nullable=false)
	private SituUsuario situacao;
	
	@OneToOne(mappedBy="responsavel", optional=true)
	private ClientePortal responsavelPor;
	
	@ManyToOne(fetch=FetchType.LAZY, optional=true)
	private ClientePortal cliente;
	
	@OneToMany(fetch=FetchType.LAZY, mappedBy="responsavel")
	private List<Artefato> artefatosCadastrados;
	
	@ManyToOne(fetch=FetchType.LAZY, optional=false)
	@JoinColumn(name="perfil_id")
	private Perfil perfil;
	
	@Override
	public String toJson() {
		return this.nomeCompleto;
	}

	public String getNomeCompleto() {
		return nomeCompleto;
	}

	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}

	public String getNomeCurto() {
		return nomeCurto;
	}

	public void setNomeCurto(String nomeCurto) {
		this.nomeCurto = nomeCurto;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public SituUsuario getSituacao() {
		return situacao;
	}

	public void setSituacao(SituUsuario situacao) {
		this.situacao = situacao;
	}
	
	public ClientePortal getCliente() {
		return cliente;
	}
	
	public void setCliente(ClientePortal cliente) {
		this.cliente = cliente;
	}
	
	public String getSenha() {
		return senha;
	}
	
	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public List<Artefato> getArtefatosCadastrados() {
		return artefatosCadastrados;
	}
	
	public void setArtefatosCadastrados(List<Artefato> artefatosCadastrados) {
		this.artefatosCadastrados = artefatosCadastrados;
	}
	
	public Perfil getPerfil() {
		return perfil;
	}
	
	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}
	
	public ClientePortal getResponsavelPor() {
		return responsavelPor;
	}
	
	public void setResponsavelPor(ClientePortal responsavelPor) {
		this.responsavelPor = responsavelPor;
	}
	
	public Boolean getEmailEnviado() {
		return emailEnviado;
	}
	
	public void setEmailEnviado(Boolean emailEnviado) {
		this.emailEnviado = emailEnviado;
	}
	
	public String getToken() {
		return token;
	}
	
	public void setToken(String token) {
		this.token = token;
	}
}